package com.doget.myhttp.http;


import android.util.Log;

import com.doget.comment.utils.GsonHelper;
import com.doget.myhttp.bean.ArticleBean;
import com.doget.myhttp.bean.Auth;
import com.doget.myhttp.bean.BannerBean;
import com.doget.myhttp.bean.BannerBeanAll;
import com.doget.myhttp.bean.BaseResult;
import com.doget.myhttp.bean.LoginBea;
import com.doget.myhttp.bean.Resource;
import com.google.gson.Gson;

import java.util.HashMap;
import java.util.List;

import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Function;
import io.reactivex.schedulers.Schedulers;
import okhttp3.MediaType;
import okhttp3.RequestBody;

/**
 * @author Able
 * @date 2018/3/20
 */
public class HttpClient {
    private static final HttpClient instance = new HttpClient();
    private static final MediaType mCommonMediaType = MediaType.parse("application/json;charset=UTF-8");


    private HttpClient() {

    }

    public static HttpClient getInstance() {
        return instance;
    }

    private RetrofitApi api = RetrofitFactory.getInstance().create(RetrofitApi.class);

    public void gotLogin() {
//        String aa = "{\n" +
//                "\t\"needEncrypMobile\": 1,\n" +
//                "\t\"password\": \"123456\",\n" +
//                "\t\"username\": \"18851032658\"\n" +
//                "}";
//        final MutableLiveData<Resource<List<BannerBean>>> bannerLiveData = new MutableLiveData<>();
//        httpClient.passwordLogin(RequestBody.create(mCommonMediaType, req));

        LoginBea loginBea = new LoginBea("18851032658", "123456", 1);


//        String userString = GsonHelper.toJson(loginBea);
        api.passwordLogin(RequestBody.create(mCommonMediaType, GsonHelper.toJson(loginBea)))
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<Auth>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(Auth auth) {
                        Log.i("listBaseResult===", "onNext: "+auth.getAccount());
                        Log.i("listBaseResult===", "onNext: "+auth.getToken());

//                        bannerLiveData.setValue(Resource.response(listBaseResult));
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.i("listBaseResult===", "onNext: onError" );
//                        bannerLiveData.setValue(Resource.error(e));
                    }

                    @Override
                    public void onComplete() {
                        Log.i("listBaseResult===", "onNext: onComplete" );
                    }
                });
//        return bannerLiveData;
    }

    /**
     * 查询文章列表
     *
     * @param pageNo 页码
     */
    public  void  queryArticle(int pageNo) {



        api.queryArticle(pageNo)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<BaseResult<ArticleBean>>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(BaseResult<ArticleBean> articleBeanBaseResult) {
//                        articleLiveData.setValue(Resource.response(articleBeanBaseResult));
                    }

                    @Override
                    public void onError(Throwable e) {
//                        articleLiveData.setValue(Resource.error(e));
                    }

                    @Override
                    public void onComplete() {

                    }
                });

    }

    /**
     * 获取首页Banner
     */
    public void getBanner() {
//        final MutableLiveData<Resource<List<BannerBean>>> bannerLiveData = new MutableLiveData<>();
        api.getBanner()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<BannerBeanAll>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(BannerBeanAll listBaseResult) {
                        Log.i("listBaseResult===", "onNext: "+listBaseResult.getErrorCode());
                        Log.i("listBaseResult===", "onNext: "+listBaseResult.getErrorMsg());

//                        bannerLiveData.setValue(Resource.response(listBaseResult));
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.i("listBaseResult===", "onNext: onError" );
//                        bannerLiveData.setValue(Resource.error(e));
                    }

                    @Override
                    public void onComplete() {
                        Log.i("listBaseResult===", "onNext: onComplete" );
                    }
                });
//        return bannerLiveData;
    }
//
//    /**
//     * 获取知识体系数据
//     */
//    public LiveData<Resource<List<TreeBean>>> getTreeData() {
//        final MutableLiveData<Resource<List<TreeBean>>> liveData = new MutableLiveData<>();
//
//        api.getTreeData()
//                .subscribeOn(Schedulers.io())
//                .observeOn(AndroidSchedulers.mainThread())
//                .subscribe(new Observer<BaseResult<List<TreeBean>>>() {
//                    @Override
//                    public void onSubscribe(Disposable d) {
//
//                    }
//
//                    @Override
//                    public void onNext(BaseResult<List<TreeBean>> listBaseResult) {
//                        liveData.setValue(Resource.response(listBaseResult));
//                    }
//
//                    @Override
//                    public void onError(Throwable e) {
//                        liveData.setValue(Resource.error(e));
//                    }
//
//                    @Override
//                    public void onComplete() {
//
//                    }
//                });
//        return liveData;
//    }
//
//    /**
//     * 查询分类文章
//     *
//     * @param pageNo 页码
//     * @param cid    分类ID
//     */
//    public LiveData<Resource<ArticleBean>> getArticleTree(int pageNo, int cid) {
//        final MutableLiveData<Resource<ArticleBean>> articleLiveData = new MutableLiveData<>();
//        articleLiveData.setValue(Resource.loading());
//
//        api.getArticleTree(pageNo, cid)
//                .subscribeOn(Schedulers.io())
//                .observeOn(AndroidSchedulers
//                        .mainThread())
//                .subscribe(new Observer<BaseResult<ArticleBean>>() {
//                    @Override
//                    public void onSubscribe(Disposable d) {
//
//                    }
//
//                    @Override
//                    public void onNext(BaseResult<ArticleBean> articleBeanBaseResult) {
//                        articleLiveData.setValue(Resource.response(articleBeanBaseResult));
//                    }
//
//                    @Override
//                    public void onError(Throwable e) {
//                        articleLiveData.setValue(Resource.error(e));
//                    }
//
//                    @Override
//                    public void onComplete() {
//
//                    }
//                });
//        return articleLiveData;
//    }
//
//
//    /**
//     * 注册
//     *
//     * @param hashMap 传参map
//     */
//    public LiveData<Resource<UserBean>> registerApp(HashMap hashMap) {
//        final MutableLiveData<Resource<UserBean>> liveData = new MutableLiveData<>();
//        liveData.setValue(Resource.loading());
//
//        api.registerApp(hashMap)
//                .subscribeOn(Schedulers.io())
//                .observeOn(AndroidSchedulers.mainThread())
//                .subscribe(new Observer<BaseResult<UserBean>>() {
//                    @Override
//                    public void onSubscribe(Disposable d) {
//
//                    }
//
//                    @Override
//                    public void onNext(BaseResult<UserBean> userBeanBaseResult) {
//                        liveData.setValue(Resource.response(userBeanBaseResult));
//                    }
//
//                    @Override
//                    public void onError(Throwable e) {
//                        liveData.setValue(Resource.error(e));
//                    }
//
//                    @Override
//                    public void onComplete() {
//
//                    }
//                });
//
//        return liveData;
//    }
//
//    /**
//     * 用户登录
//     *
//     * @param map
//     * @return
//     */
//    public LiveData<Resource<UserBean>> loginApp(HashMap map) {
//        final MutableLiveData<Resource<UserBean>> liveData = new MutableLiveData<>();
//        api.loginApp(map)
//                .subscribeOn(Schedulers.io())
//                .observeOn(AndroidSchedulers.mainThread())
//                .subscribe(new Observer<BaseResult<UserBean>>() {
//                    @Override
//                    public void onSubscribe(Disposable d) {
//
//                    }
//
//                    @Override
//                    public void onNext(BaseResult<UserBean> userBeanBaseResult) {
//                        liveData.setValue(Resource.response(userBeanBaseResult));
//                    }
//
//                    @Override
//                    public void onError(Throwable e) {
//                        liveData.setValue(Resource.error(e));
//                    }
//
//                    @Override
//                    public void onComplete() {
//
//                    }
//                });
//        return liveData;
//    }
//
//    public LiveData<Resource<UserBean>> registerAndLogin(HashMap hashMap) {
//        final MutableLiveData<Resource<UserBean>> liveData = new MutableLiveData<>();
//        api.registerApp(hashMap)
//                .subscribeOn(Schedulers.io())
//                .observeOn(AndroidSchedulers.mainThread())
//                .flatMap(new Function() {
//                    @Override
//                    public Object apply(Object o) throws Exception {
//                        return api.loginApp(hashMap);
//                    }
//                })
//                .subscribe(new Observer<BaseResult<UserBean>>() {
//                    @Override
//                    public void onSubscribe(Disposable d) {
//
//                    }
//
//                    @Override
//                    public void onNext(BaseResult<UserBean> userBeanBaseResult) {
//                        liveData.setValue(Resource.response(userBeanBaseResult));
//                    }
//
//                    @Override
//                    public void onError(Throwable e) {
//                        liveData.setValue(Resource.error(e));
//                    }
//
//                    @Override
//                    public void onComplete() {
//
//                    }
//                });
//        return liveData;
//    }
//
//
//    public LiveData<Resource<TodoBean>> getTodo(int pageNo, int status) {
//        final MutableLiveData<Resource<TodoBean>> liveData = new MutableLiveData<>();
//
//        api.getTodo(pageNo, status)
//                .subscribeOn(Schedulers.io())
//                .observeOn(AndroidSchedulers.mainThread())
//                .subscribe(new Observer<BaseResult<TodoBean>>() {
//                    @Override
//                    public void onSubscribe(Disposable d) {
//
//                    }
//
//                    @Override
//                    public void onNext(BaseResult<TodoBean> todoBeanBaseResult) {
//                        liveData.setValue(Resource.response(todoBeanBaseResult));
//                        LogUtils.d(todoBeanBaseResult.toString());
//                    }
//
//                    @Override
//                    public void onError(Throwable e) {
//                        liveData.setValue(Resource.error(e));
//                    }
//
//                    @Override
//                    public void onComplete() {
//
//                    }
//                });
//        return liveData;
//    }

}
